package affichage;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;

import deroulementjeu.Partie;
 

/**
 * Classe des boutons qui se situent dans l'éditeur pour charger et sauvegarder
 * des terrains de jeu
 * @author Alexis BRASY, Geoffrey LEQUESNE, Sandrine PIRIOU, Michel POPOV
 */
public class Bouton extends JButton {

	/** Entier nécessaire pour la sérialisation */
    private static final long serialVersionUID = 1L;
    /** La partie contenant les règles et les équipes */
    private Partie partie;
    /** La vue du terrain */
    private TerrainView tv;
    /** Le menu de l'éditeur qui contient ces boutons */
    private EditeurMenuDroit emd;
    
    
    /**
     * Constructeur du bouton
     * @param str la chaîne de caractères à afficher sur le bouton
     * @param p la partie
     * @param tv la vue du terrain
     * @param e le menu droit
     */
    public Bouton(String str, Partie p, TerrainView tv, EditeurMenuDroit e) {
    	 	
        super(str);
        this.emd = e;
        this.tv = tv;
        this.partie = p;
        if (str == "Sauvegarder") {
            this.addActionListener(new SaveListener());
        } else if (str == "Charger") {
            this.addActionListener(new ChargListener());
        }
    }
    
    /**
     * Classe qui écoute notre bouton "Sauvegarder"
     */
    class SaveListener  implements ActionListener {
 
        /**
         * Redéfinition de la méthode actionPerformed
         */
        public void actionPerformed(ActionEvent arg0) {
            JFileChooser fileChooser = new JFileChooser("parties/");
            ChoixFichier filtre = new ChoixFichier(".par", "Fichier Partie");
            File file;

            fileChooser.addChoosableFileFilter(filtre);

            // On affiche une boîte de dialogue pour que l'utilisateur enregistre
            // la carte créée
            if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
                // On ajoute notre filtre sur l'objet fileChooser !
                file = fileChooser.getSelectedFile();
                // Si l'extension est valide
                if (fileChooser.getFileFilter().accept(file)) {
                    // 
                    partie = tv.getPartie();
                    partie.sauvegarde("parties/" + file.getName());
                } else {
                    
                }
            }
        }
                
    }
        

    /**
     * Classe qui écoute notre bouton "Charger"
     */
    class ChargListener  implements ActionListener {
 
        /**
         * Redéfinition de la méthode actionPerformed
         */
        public void actionPerformed(ActionEvent e) { 
            JFileChooser fileChooser = new JFileChooser("parties/");
            ChoixFichier filtre = new ChoixFichier(".par", "Fichier Partie");
            File file;

            fileChooser.addChoosableFileFilter(filtre);

            // On affiche une boîte de dialogue pour que l'utilisateur choisisse
            // une carte déjà créée
            if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                // On ajoute notre filtre sur l'objet fileChooser !
                file = fileChooser.getSelectedFile();
                // Si l'extension est valide
                Partie newP = partie.charger("parties/" + file.getName());

                partie = newP;
                partie.init();
    					
                tv.setTerrain(partie.getTerrain());
                tv.setPartie(partie);
                tv.getMenu().setPartie(partie);
                
                // On affiche les nouvelles tailles du terrain dans le menu droit
                emd.setTailleX();
                emd.setTailleY();
    					
            }
        }
                
    }
}
